#!/bin/bash
# 停止所有微服务

echo "开始停止充电宝租赁系统微服务..."

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

# 日志函数
log_info() {
    echo -e "${GREEN}[INFO]${NC} $1"
}

log_warn() {
    echo -e "${YELLOW}[WARN]${NC} $1"
}

log_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

# 停止服务函数
stop_service() {
    local service_name=$1
    local pid_file="pids/${service_name}.pid"
    
    if [ -f "$pid_file" ]; then
        local pid=$(cat "$pid_file")
        if ps -p "$pid" > /dev/null 2>&1; then
            log_info "停止服务: $service_name (PID: $pid)"
            kill -15 "$pid"
            
            # 等待进程优雅关闭
            for i in {1..30}; do
                if ! ps -p "$pid" > /dev/null 2>&1; then
                    log_info "✓ $service_name 已停止"
                    rm -f "$pid_file"
                    return 0
                fi
                sleep 1
            done
            
            # 如果优雅关闭失败，强制杀死进程
            log_warn "强制停止 $service_name"
            kill -9 "$pid" 2>/dev/null || true
            rm -f "$pid_file"
            log_info "✓ $service_name 已强制停止"
        else
            log_warn "$service_name 进程不存在，清理PID文件"
            rm -f "$pid_file"
        fi
    else
        log_warn "$service_name PID文件不存在"
    fi
}

# 按端口停止服务
stop_by_port() {
    local port=$1
    local service_name=$2
    
    local pid=$(lsof -ti:$port 2>/dev/null)
    if [ -n "$pid" ]; then
        log_info "停止占用端口 $port 的服务: $service_name"
        kill -15 "$pid"
        sleep 2
        
        # 检查是否还在运行
        if ps -p "$pid" > /dev/null 2>&1; then
            log_warn "强制停止端口 $port 上的服务"
            kill -9 "$pid"
        fi
        log_info "✓ 端口 $port 已释放"
    fi
}

# 主流程
main() {
    log_info "开始停止所有微服务..."
    
    # 按相反顺序停止服务
    stop_service "api-gateway"
    stop_service "admin-system"
    stop_service "order-center"
    stop_service "finance-center"
    stop_service "device-center"
    stop_service "payment-center"
    stop_service "user-center"
    
    # 确保所有端口都已释放
    log_info "检查并清理端口占用..."
    stop_by_port "8000" "api-gateway"
    stop_by_port "8006" "admin-system"
    stop_by_port "8003" "order-center"
    stop_by_port "8005" "finance-center"
    stop_by_port "8004" "device-center"
    stop_by_port "8002" "payment-center"
    stop_by_port "8001" "user-center"
    
    # 清理PID目录
    if [ -d "pids" ]; then
        rm -rf pids/*
        log_info "清理PID文件"
    fi
    
    log_info "所有微服务已停止"
}

# 显示帮助信息
show_help() {
    echo "用法: $0 [选项]"
    echo ""
    echo "选项:"
    echo "  --help     显示帮助信息"
    echo ""
    echo "示例:"
    echo "  $0         # 停止所有服务"
}

# 参数处理
case "$1" in
    --help)
        show_help
        exit 0
        ;;
    "")
        main
        ;;
    *)
        log_error "未知参数: $1"
        show_help
        exit 1
        ;;
esac